<script>
  /*
  描述
  实现一个打点计时器，要求
  1、从 start 到 end（包含 start 和 end），每隔 100 毫秒 console.log 一个数字，每次数字增幅为 1
  2、返回一个对象，对象需要包含一个 cancel 方法，用于停止定时操作
  3、第一个数需要立即输出
  */

  function count(start, end) {

  }

  /*
  将数组 arr 中的元素作为调用函数 fn 的参数
  */

  function argsAsArray(fn, arr) {
  }

  console.log(argsAsArray(
    (greeting, name, punctuation) => {
      return greeting + ', ' + name + (punctuation || '!');
    },
    ['Hello', 'Ellie', '!']
  ))
  // Hello, Ellie!
  </script>

  <script>
  /*
    转换秒数成为带格式的时间
      要求时间格式 时:分:秒
      不足两位的补0，比如1小时0分10秒：01:00:10
  */

  function formatTime(second) {
  }

  console.log(formatTime(3660)) // 01:00:10

  /*
  描述
  完成下面的函数使这段代码可以正常运行
  */

  function speak(fn, obj) {
    /* 你的代码 */
  }

  console.log(speak(
    function () {
      console.log(this.greeting + ', ' + this.name + '!!!');
    },
    {greeting: 'Hello', name: 'Rebecca'}
  )) // Hello, Rebecca!!!

  /*

  某人邀请他的朋友来家聚餐，朋友名单如下 "名1:姓1;名2:姓2;..."

  s = "Fred:Corwill;Wilfred:Corwill;Barney:Tornbull;Betty:Tornbull;Bjon:Tornbull;Raphael:Corwill;Alfred:Corwill";

  写个函数，实现以下功能

  把字符串变成全大写字母
  用姓排序之后转换成这个样子的字符串

  "(CORWILL, ALFRED)(CORWILL, FRED)(CORWILL, RAPHAEL)(CORWILL, WILFRED)(TORNBULL, BARNEY)(TORNBULL, BETTY)(TORNBULL, BJON)"
  */

  function meeting(str) {
  }

  meeting(
    'Alexis:Wahl;John:Bell;Victoria:Schwarz;Abba:Dorny;Grace:Meta;Ann:Arno;Madison:STAN;Alex:Cornwell;Lewis:Kern;Megan:Stan;Alex:Korn'
  )

  /*
  找出按规则得分最高的单词

  根据字母的位置，每个字母有自己的分值，a = 1, b = 2, c = 3 按字母表顺序以此类推

  返回值为得分最高的单词

  如果两个最高分单词得分一样，先出现的排在前面

  测试的字符串所有字符都为小写字符
  */

  function high(x){
  }

  console.log(high('man i need a taxi up to ubud')) // 'taxi'
  console.log(high('what time are we climbing up the volcano')) // 'volcano'
  console.log(high('take me to semynak')) // 'semynak'
  console.log(high('b aa b')) // 'b'
  console.log(high('b aa')) // 'b'
  console.log(high('bb d')) // 'bb'
  console.log(high('d bb')) // 'd'
  console.log(high('aaa ab b c')) // 'aaa'

  // 完成以下函数
  // n为正整数，找出所有小于n的自然数，这些数字是可以被3整除或者可以被5整除，
  // 将它们相加，并返回
  function sumMultiples(n) {
    /*你的代码 */
  }

  /*
    递归函数最著名的例子就是算阶乘了，比如想算n的阶乘 1*2*3*4...*n可以用递归计算

    function factorial(n) {
      if (n === 0) {
        return 1;
      }
      return factorial(n - 1) * n;
    }

    现在用递归函数实现将一个字符串的字符反转
  */

  function reverse(string) {

  }



  /*
    写一个函数add，add的参数有一个，是字符串，形式是做加法的字符，比如
        "1+87+98+213"
       要求你完成add函数，返回正确的算式值
       比如dd('7+12+100') 应该返回 119.
  */
function add() {

}

  /*

    循环可以套循环
    let a = [[1, 7, 3], [2, 8, 5], [9, 0, 4]];
    for (let i = 0; i < 3; i++) {
      for (let j = 0; j < 3; j++) {
        console.log(a[i][j]);
      }
    }
    以上代码打印二维数组里的每一个元素

    现在请你写一个sum方法，可以计算二维数组的元素之和
    比如asum([[1, 2], [3]]) 应该返回 6.
  */
function asum() {

}

  /*

    最大公约数

    最大公约数是能被两个整数同时整除的最大整数

    写一个函数 gcd 求2个数的最大公约数
    比如 gcd(6, 15) 应该返回 3.

  */
function gcd() {

}

  /*

    do...while和while相似，循环部分都是要符合while的条件才能反复运行
    区别是do...while无论如何都会先运行一次代码块里的内容，比如

    let threeX = '';
    do {
      threeX = threeX + 'x';
    } while (threeX.length < 3);
    当循环结束，threeX 的值是 'xxx'

    写一个函数lcm(a, b) 计算其最小公倍数，其中要使用do... while比如
    lcm(4, 6) 是 12
  */
function lcm(){

}
</script>
